package com.scott.singleton.lesson04.singletondemo;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 使用单例模式  饿汉式的做法
 * 因为配置文件定义好后在运行过程中就不会变
 * 拿马士兵老师的经典来说就是：你上战场打仗，脑子里有枪的概念，能想出枪的模样，但是你总不能想着枪去打仗啊，所以要造出一个枪来这就是 实例化
 * 如A是一个对象，“ A a; " 这是定义出a但也还没有实例化，他表示生孩子起好了名字，但是还没有生下来。
 * 所以要a = new()A;才是真真正正的把它生下来，不过一般都就写成了A a = new A(); 有时会碰上“ A a; "这种以后再实例化的。
 */
public class UserEntity {
	
	/**
	 * 类实例  cf: 对象实例
	 * 加载类的时候直接创建类的实例  =new类的对象
	 */
	private static UserEntity instance = new  UserEntity();
	
	private String name;
	
	private int age;
	
	private UserEntity(){
		config();
	}
	
	public static UserEntity getInstance(){
		return instance;
	}
	
	private void config(){
		System.out.println("读取1次配置文件....");
		Properties ps = new Properties();
		
		InputStream in = null;
		try {
			in = UserEntity.class.getClassLoader().getResourceAsStream("com/scott/singleton/lesson03/config.properties");
			ps.load(in);
			this.name =ps.getProperty("name");
			this.age  =Integer.parseInt(ps.getProperty("age"));
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if(null != in){
					in.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "UserEntity [name=" + name + ", age=" + age + "]";
	}
	
	
	

}
